from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
#
# 定义坐标轴
fig4 = plt.figure()
ax4 = plt.axes(projection="3d")

# 生成三维数据
xx = np.arange(-5, 5, 0.1)
yy = np.arange(-5, 5, 0.1)
X, Y = np.meshgrid(xx, yy)
Z = np.sin(np.sqrt(X**2 + Y**2))

# 作图
ax4.plot_surface(X, Y, Z, alpha=0.3, cmap="winter")  # 生成表面， alpha 用于控制透明度
ax4.contour(X, Y, Z, zdir="z", offset=-3, cmap="rainbow")  # 生成z方向投影，投到x-y平面
ax4.contour(X, Y, Z, zdir="x", offset=-6, cmap="rainbow")  # 生成x方向投影，投到y-z平面
ax4.contour(X, Y, Z, zdir="y", offset=6, cmap="rainbow")  # 生成y方向投影，投到x-z平面
# ax4.contourf(X,Y,Z,zdir='y', offset=6,cmap="rainbow")   #生成y方向投影填充，投到x-z平面，contourf()函数

# 设定显示范围
ax4.set_xlabel("X")
ax4.set_xlim(-6, 4)  # 拉开坐标轴范围显示投影
ax4.set_ylabel("Y")
ax4.set_ylim(-4, 6)
ax4.set_zlabel("Z")
ax4.set_zlim(-3, 3)

plt.show()
